using System;
using System.Collections.Generic;
using SIP.PN.FrontEnd.Code;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.FrontEnd.controles
{
    public partial class CrudTareaRequisito : ControlAbstracto
    {
        #region Propiedades

        private Acciones Accion
        {
            get { return (Acciones)ViewState["Accion"]; }
            set { ViewState["Accion"] = value; }
        }

        private int CodigoProyecto
        {
            get { return (int)ViewState["CodigoProyecto"]; }
            set { ViewState["CodigoProyecto"] = value; }
        }

        private int CodigoProyectoTrabajo
        {
            get { return (int)ViewState["CodigoProyectoTrabajo"]; }
            set { ViewState["CodigoProyectoTrabajo"] = value; }
        }

        private int CodigoProyectoTarea
        {
            get { return (int)ViewState["CodigoProyectoTarea"]; }
            set { ViewState["CodigoProyectoTarea"] = value; }
        }
        
        #endregion

        #region Metodos Privados

        private void Guardar()
        {
            switch (Accion)
            {
                case Acciones.Nuevo:
                    SrvProyecto.AgregarProyectoTareaRequisito(0, 0, CodigoProyectoTarea, ddl_nivel.SelectedValue, Convert.ToInt32(txt_cantidad.Text));
                    break;
                case Acciones.Editar:
                    SrvProyecto.ModificarProyectoTareaRequisito(0, 0, CodigoProyectoTarea, ddl_nivel.SelectedValue, Convert.ToInt32(txt_cantidad.Text));
                    break;
            }
            Ocultar();
        }

        #endregion

        #region Metodos Publicos

        public void Inicializar(Acciones accion, int codigoProyecto, int codigoProyectoTrabajo, int codigoProyectoTarea)
        {
            Inicializar(accion, codigoProyecto, codigoProyectoTrabajo, codigoProyectoTarea, string.Empty);
        }

        public void Inicializar(Acciones accion, int codigoProyecto, int codigoProyectoTrabajo, int codigoProyectoTarea, string codigoNivelEspecialidad)
        {
            Accion = accion;
            CodigoProyecto = codigoProyecto;
            CodigoProyectoTrabajo = codigoProyectoTrabajo;
            CodigoProyectoTarea = codigoProyectoTarea;
            ProyectoTareaRequisitoDTO entidad = null;
            switch (Accion)
            {
                case Acciones.Nuevo:
                    lbl_titulo.Text = "Agregar Requisito";
                    break;
                case Acciones.Visualizar:
                    lbl_titulo.Text = "Visualizar Requisito";
                    entidad = SrvProyecto.ObtenerProyectoTareaRequisito(CodigoProyecto, CodigoProyectoTrabajo, CodigoProyectoTarea, codigoNivelEspecialidad);
                    break;
                case Acciones.Editar:
                    lbl_titulo.Text = "Editar Requisito";
                    entidad = SrvProyecto.ObtenerProyectoTareaRequisito(CodigoProyecto, CodigoProyectoTrabajo, CodigoProyectoTarea, codigoNivelEspecialidad);
                    break;
            }
            ResetearFormulario();
            Seguridad();
            CargarFormulario(entidad);
        }

        public override void Seguridad()
        {
            btn_Aceptar.Visible = true;
            btn_Cancelar.Visible = true;
            ddl_nivel.Enabled = false;
            txt_cantidad.Enabled = false;
            switch (Accion)
            {
                case Acciones.Visualizar:
                    btn_Aceptar.Visible = false;
                    break;
                case Acciones.Nuevo:
                    ddl_nivel.Enabled = true;
                    txt_cantidad.Enabled = true;
                    break;
                case Acciones.Editar:
                    txt_cantidad.Enabled = true;
                    break;
            }
        }

        public void ResetearFormulario()
        {
            ddl_nivel.Enabled = false;
            txt_cantidad.Enabled = false;
            ddl_nivel.Items.Clear();
        }

        public void CargarFormulario(ProyectoTareaRequisitoDTO entidad)
        {
            IList<NivelEspecialidadDTO> niveles = SrvAplicacion.ListarNivelEspecialidad(string.Empty);
            Utilidades.BindearComboBox(ddl_nivel, niveles, "Nombre", "Codigo", false);
            
            if (entidad != null)
            {
                ddl_nivel.SelectedValue = entidad.CodigoNivelEspecialidad;
                txt_cantidad.Text = entidad.Cantidad.ToString();
            }

            up_CrudTareaRequisito.Update();
        }

        public void Mostrar()
        {
            mpe_CrudTareaRequisito.Show();
        }

        public void Ocultar()
        {
            mpe_CrudTareaRequisito.Hide();
        }

        #endregion

        #region Eventos

        private event EventHandler<EventArgs> aceptar;
        public event EventHandler<EventArgs> Aceptar
        {
            add { aceptar += value; }
            remove { aceptar -= value; }
        }

        private event EventHandler<EventArgs> cancelar;
        public event EventHandler<EventArgs> Cancelar
        {
            add { cancelar += value; }
            remove { cancelar -= value; }
        }

        protected void btn_Cancelar_Click(object sender, EventArgs e)
        {
            Ocultar();
            if (cancelar!=null)
                cancelar(this, new EventArgs());
        }

        protected void btn_Aceptar_Click(object sender, EventArgs e)
        {
            Guardar();
            if (aceptar != null)
                aceptar(this, new EventArgs());
        }

        #endregion
    }
}